import java.util.Arrays;

/**
 * @author caesar
 * @date 2025/7/2
 * @apiNote
 */
public class Arraysmethodpractice {
    public static void main(String[] args) {
        int [] arr = {1,2,3,4,5,6,7,8,9,10};
        System.out.println("arr = " + Arrays.toString(arr));
        //调用Arrays的toString方法，实现数组的输出，参数为数组    原理是将数组转换成字符串
        //调用Arrays的copeOf,复制
        int[] arr1 = Arrays.copyOf(arr,arr.length);
        System.out.println("arr1 = " + Arrays.toString(arr1));
        //调用Arrays的copeOfRange,自定义范围的复制，参数为：目标数组，起始位置，结束位置
        int[] arr2 = Arrays.copyOfRange(arr,3,5);
        System.out.println("arr2 = " + Arrays.toString(arr2));
        //调用System里面的arraycopy，可以选定复制的源数组，参数为：原数组，起始位置，目标数组，目标数组的起始位置，复制的长度
        int[] arr3  = new int[arr.length];
        System.arraycopy(arr,0,arr3,2,3);
        System.out.println("arr3= " + Arrays.toString(arr3));

        //插入m个新元素思路：
        /*
        * 先定义新数组，扩容为原数组长度+m
        * 复制旧的数组到新数组中
        * 上述两步骤可以合并成一步
        * 按照要求进行移动，移动的长度为插入元素的个数
        * 对应赋值
        * */
        int[] arr4 = Arrays.copyOf(arr,arr.length+3);
        System.out.println("arr4 = " + Arrays.toString(arr4));
        System.arraycopy(arr4,1,arr4,4,9);
        System.out.println("arr4 = " + Arrays.toString(arr4));

        //删除arr[m]个元素
        System.arraycopy(arr,2, arr, 1,3);
        System.out.println("arr的元素：" + Arrays.toString(arr));
        arr = Arrays.copyOf(arr, arr.length-1);
        System.out.println("arr的元素：" + Arrays.toString(arr));

        //增加和删除n个新元素到某个位置的区别：
        /*
        * 增加元素的步骤是，先复制一个新的范围更大的数组，之后再对原数组的数据进行移位，再赋值
        * 删除元素的步骤是，先对原数组的元素进行移动，之后再复制一个范围较小的数组
        * */
    }
}
